package lx

object zzz {
    def main(args: Array[String]): Unit = {
      // 类型推导，这个时候age是Int类型
      var age = 18
      /**
       * 有两种⽅式我们可以age是Int类型的：
       * 1. idea提示
       * 2. println(age.isInstanceOf[Int]) 结果为true
       */
      // 类型确定后，就不能修改，说明Scala是强数据类型语⾔
      // age = 2.1 编译器报错
      // age可以修改，因为age是var声明的
      age = 19
      val sal = 200
      // sal是val声明的，所以不可变
      // sal = 10000 编译器报错
      /**
       * Scala设计者为什么设计 var 和 val 呢？
       * 1、在实际编程，我们更多的需求是获取/创建⼀个对象后，读取该对象的属性，或者是修
改对象的属性值，但是我们很少去改变这个对象本身。
       * var dog = new Dog()
       * dog.age = 99
       * dog = new Dog()
       * 这时我们就可以使⽤val定义dog
       * val dog = new Dog()
       * dog.age = 99
       * 2、因为val 没有线程安全问题，因此效率⾼，scala的设计者推荐我们val
       * 3、如果对象需要改变，则使⽤var
       */
      val dog = new Dog()
      // 0
      println(dog.age)
      println(dog.name)
      // 这⾥我们就不能有下⾯的操作了
      // dog = new Dog()
    }

  /**
   * 声明⼀个Dog类
   */
  class Dog {
    // 声明⼀个age属性,给了⼀个默认值 _
    var age: Int = _
    var name: String = "⼩花"
  }
}
